package com.wisdom.smartbook.utils;

import android.graphics.Bitmap;

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * Description：上传工具类 <br/>
 * Copyright (c) 2017<br/>
 * This program is protected by copyright laws <br/>
 * Date:2017/8/19 16:44
 *
 * @author 姜文莒
 * @version : 1.0
 */
public class FileTool {



    /**
     * 质量压缩方法
     *
     * @param image
     * @return
     */
    public static void compressImage(Bitmap image, String smallFilePath) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 质量压缩方法，这里100表示不压缩，把压缩后的数据存放到baos中
        int options = 90;
        while (baos.toByteArray().length / 1024 > 1024 && options > 10) { // 循环判断如果压缩后图片是否大于1MB,大于继续压缩
            baos.reset(); // 重置baos即清空baos
            image.compress(Bitmap.CompressFormat.JPEG, options, baos);// 这里压缩options%，把压缩后的数据存放到baos中
            options -= 10;// 每次都减少10
        }
        try {
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(smallFilePath));
            baos.writeTo(bos);
            bos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 质量压缩方法
     *
     * @param image
     * @return
     */
    public static void compress(Bitmap image, String smallFilePath) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 质量压缩方法，这里100表示不压缩，把压缩后的数据存放到baos中
        int options = 90;
        while ((baos.toByteArray().length / 1024) > (1*1024) && options > 10) { // 循环判断如果压缩后图片是否大于2MB,大于继续压缩
            baos.reset(); // 重置baos即清空baos
            image.compress(Bitmap.CompressFormat.JPEG, options, baos);// 这里压缩options%，把压缩后的数据存放到baos中
            options -= 5;// 每次都减少5
        }
        try {
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(smallFilePath));
            baos.writeTo(bos);
            bos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
